package com.demo.gateway.utils;

import java.util.Map;

/**
 * @author yzy
 * @date 2024/7/13 下午5:46
 */

public abstract class AssembleUtils {

    /**
     * 根据数据字符串替换模板中的占位符。
     *
     * @param template 待替换占位符的模板字符串。
     * @param dataString 包含替换值的数据字符串（JSON或XML）。
     * @return 替换占位符后的字符串。
     */
    public final String replaceTemplate(String template, String dataString) {
        Map<String, Object> requestData = parseData(dataString);

        String result = template;
        for (Map.Entry<String, Object> entry : requestData.entrySet()) {
            String key = entry.getKey();
            Object value = entry.getValue();
            result = replacePlaceholders(result, key, value);
        }

        return result;
    }

    /**
     * 抽象方法：解析数据字符串为Map。子类必须实现此方法，以根据特定格式解析数据。
     *
     * @param dataString 包含数据的字符串（JSON或XML）。
     * @return 解析后的数据Map。
     */
    protected abstract Map<String, Object> parseData(String dataString);

    /**
     * 抽象方法：替换模板中的占位符。子类必须实现此方法，以自定义处理并替换占位符的方式。
     *
     * @param template 原始模板字符串，可能包含占位符。
     * @param key 当前处理的占位符键。
     * @param value 占位符对应的值，可以是各种类型的对象。
     * @return 替换占位符后的模板字符串。
     */
    protected abstract String replacePlaceholders(String template, String key, Object value);
}

